// common/logger/logger.go
package logger

import (
	"fmt"
	"os"

	"github.com/gookit/slog"
	"github.com/gookit/slog/handler"
)

// InitLogger 初始化全局日志配置
func InitLogger() {
	// 确保logs目录存在
	if err := os.MkdirAll("logs", 0755); err != nil {
		// 使用标准输出作为备用日志
		fmt.Printf("创建logs目录失败: %v\n", err)
	}

	// 确保程序退出时刷新所有日志
	defer func() {
		slog.Flush()
	}()

	// 1. 创建文件处理器，实现日志轮转
	// 错误级别日志单独存放
	errorFileHandler := handler.MustRotateFile(
		"logs/app_error.log",
		handler.EveryDay,                         // 每天轮转一次
		handler.WithLogLevels(slog.DangerLevels), // 包含 Error, Warn, Panic 级别
	)

	// 普通信息级别日志存放
	infoFileHandler := handler.MustRotateFile(
		"logs/app_info.log",
		handler.EveryDay,
		handler.WithLogLevels(slog.NormalLevels), // 包含 Info, Debug, Trace 等级别
	)

	// 2. 将多个处理器添加到全局logger
	slog.PushHandlers(errorFileHandler, infoFileHandler)

	// 3. 设置全局日志级别（可根据环境变量动态调整）
	slog.SetLogLevel(slog.InfoLevel)
}

// 创建带自动刷新的日志函数
func Info(msg ...any) {
	slog.Info(msg)
	slog.Flush()
}

func Error(msg ...any) {
	slog.Error(msg)
	slog.Flush()
}

func Debug(msg ...any) {
	slog.Debug(msg)
	slog.Flush()
}

func Warn(msg ...any) {
	slog.Warn(msg)
	slog.Flush()
}
